﻿// Original author contact info: Owen Emlen (owene_1998@yahoo.com)
// Note: other individuals may also have contributed to this code
// Project hosted on CodePlex.com as of 1/10/2009 at http://www.codeplex.com/EmlenMud
using System;
using System.ComponentModel;
using System.Reflection;
using BrainTechLLC.ThreadSafeObjects;

namespace BrainTechLLC
{
    public static partial class Lookups
    {
        public static readonly ThreadSafeLookupOnDemand<Type, ThreadSafeLookup<Type, object>> ClassInfoAttributeLookup = new ThreadSafeLookupOnDemand<Type, ThreadSafeLookup<Type, object>>();
        public static readonly ThreadSafeLookupOnDemand<string, ThreadSafeCounter> CounterLookup = new ThreadSafeLookupOnDemand<string, ThreadSafeCounter>();
        public static readonly ThreadSafeLookupOnDemand<string, object> LockableLookup = new ThreadSafeLookupOnDemand<string, object>();
        public static readonly ThreadSafeLookupOnDemand<MethodInfo, ThreadSafeLookup<Type, object>> MethodInfoAttributeLookup = new ThreadSafeLookupOnDemand<MethodInfo, ThreadSafeLookup<Type, object>>();
        public static readonly ThreadSafeLookupOnDemand<PropertyInfo, ThreadSafeLookup<Type, object>> PropInfoAttributeLookup = new ThreadSafeLookupOnDemand<PropertyInfo, ThreadSafeLookup<Type, object>>();

        public static ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo> ElseLookup = new ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo>();
        public static ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo> GeneralLookup = new ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo>();
        public static ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo> IfLookup = new ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo>();
        public static ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo> ThenLookup = new ThreadSafeLookupOnDemandWithDelegate<string, MethodInfo>();        

        internal static readonly ThreadSafeLookup<Type, PropertyDescriptor> _typeIDPropertyMap = new ThreadSafeLookup<Type, PropertyDescriptor>();
    }
}